package com.ruge._08_springboot_springdata_jpa.model.base;

import lombok.Data;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;

/**
 * 创建人 ：爱丽丝、如歌
 * 创建时间 ：2019-07-02  19:49
 * 描述 ：https://www.cnblogs.com/a8457013/p/7753575.html
 * https://blog.csdn.net/fly910905/article/details/78140411
 *
 * @Entity注解，其只有一个属性name，表示其所对应的数据库中的表名
 */
@Data
@Entity(name = "t_base_user")
@Table(name = "t_base_user")
public class BaseModel implements Serializable {
    // 联合主键测试
  /*  @EmbeddedId
    private UnionPk unionPk;*/
  /*  @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "AUTO_ID", columnDefinition = "int COMMENT '表示实体标识由 OpenJPA 容器自动生成，这也是 Strategy 属性的默认值'")
    private Integer autoId;*/
  /*  @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "IDENTITY_ID", columnDefinition = "int COMMENT 'OpenJPA 容器将使用数据库的自增长字段为新增加的实体对象赋唯一值，作为实体的标识。这种情况下需要数据库提供对自增长字段的支持，常用的数据库中，HSQL、SQL Server、MySQL、DB2、Derby 等数据库都能够提供这种支持'")
    private Integer identityId;*/

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,generator = "t_user_pk")
    @TableGenerator(name = "t_user_pk",
            table = "t_base_pk",
            pkColumnName = "table_name",
            valueColumnName = "max_id",
            pkColumnValue = "t_user",
            initialValue = 1,
            allocationSize = 1
    )
    @Column(name = "TABLE_ID", columnDefinition = "int COMMENT '表示使用数据库中指定表的某个字段记录实体对象的标识，通过该字段的增长为新增加的实体对象赋唯一值，作为实体的标识'")
    private Integer tableid;
    @Column(name = "USER_NAME", columnDefinition = "varchar(25) COMMENT '用户名'")
    private String userName;
    @NotNull
    private int age;
    // 不需要映射到数据库的字段
    @Transient
    private String detail;
    //对日期类型的属性做映射
    @Temporal(TemporalType.TIMESTAMP)// 时间戳
    private Date createDate = new Date();
    @Temporal(TemporalType.DATE)// 时间精确到天
    private Date birthday = new Date();

    @Column(name = "USER_BLOB", columnDefinition = "text COMMENT '用户简介'")
    private String myLob;
}
